package com.t.bricks.bussiness.db.mapper.rechargecard;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.t.bricks.bussiness.db.entity.rechargecard.RechargeCard;
import com.t.bricks.bussiness.db.entity.rechargecard.base.CustomerAccountBase;
import com.t.bricks.bussiness.db.entity.rechargecard.base.RechargeBase;
import com.t.bricks.bussiness.model.rechargecard.ConditionRechargeCard;
import com.t.bricks.model.OrderInfo;
import com.t.bricks.model.Page;

@Mapper
public interface RechargeCardMapper {
	
	/**
	 * 批量新增数据
	 * @Param list
	 * @return int
	 */
	int adds(List<RechargeCard> list);

	/**
	 * 删除
	 * 注:只能删除未被激活的数据
	 * @Param uId
	 * @Param iVersion
	 * @return int
	 */
	int del(@Param("uId") String uId, @Param("iVersion") Integer iVersion);
	
	/**
	 * 根据编号查询数据
	 * @Param uId
	 * @return RechargeCard
	 */
	RechargeCard findById(@Param("uId") String uId);
	
	/**
	 * 根据号码查询数据
	 * @Param sNo
	 * @return RechargeCard
	 */
	RechargeCard findByNo(@Param("sNo") String sNo);

	/**
	 * 根据字段名取指定记录编号的数据库表中对应字段的值
	  * @param uId 记录主键
	 * @param fieldNames 待取数据的字段名称集合
	 * @return Map<String, Object> 返回内容data中存放的是Map
	 */
	Map<String, Object> getValueByFieldName(@Param("uId") String uId,
			@Param("fieldNames") List<String> fieldNames);

	/**
	 * 取记录对应的版本号
	  * @param uId 记录主键
	 * @return Integer 如果记录不存在则返回null
	 */
	Integer getiVersion(@Param("uId") String uId);

	/**
	 * 根据关键值取对象集合
	 * @Param rechargeCard
	 * @return List<RechargeCard>
	 */
	List<RechargeCard> findByKey(RechargeCard rechargeCard);

	/**
	 * 根据关键值查询数量
	 * @Param rechargeCard
	 * @return int
	 */
	int findCountByKey(RechargeCard rechargeCard);
	
	/**
	 * 查询分页信息
	 * @param page 分页信息对象
	 * @param orders 排序数据集合
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return List<RechargeCard>
	 */
	List<RechargeCard> findByPage(
		@Param("page") Page page,
		@Param("orders") List<OrderInfo> orders,
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionRechargeCard condition
	);
	
	/**
	 * 查询分页总数
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return int
	 */
	int findByPageCount(
			@Param("sLikeStr") String sLikeStr,
			@Param("dLikeDateSt") Date dLikeDateSt,
			@Param("dLikeDateEd") Date dLikeDateEd,
			@Param("condition") ConditionRechargeCard condition
	);

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @Param uId
	 * @return RechargeCard
	 */
	RechargeCard findByPageRow(@Param("uId") String uId);

	/**
	 * 查询搜索用的数据
	 * @param whereStr 查询条件字符串
	 * @param orders 排序数据集合
	 * @return List<RechargeCard>
	 */
	List<RechargeCard> findBySearch(
			@Param("whereStr") String whereStr,
			@Param("orders") List<OrderInfo> orders
	);

	/**
	 * 查询导出到文件的数据
	 * @param orders 排序数据集合
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return List<RechargeCard>
	 */
	List<RechargeCard> findByExport(
		@Param("orders") List<OrderInfo> orders,
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionRechargeCard condition
	);
	
	//----------------------------- 自动生成代码结束 ---------------------------//

	/**
	 * 取指定编号的状态值
	 * @param uId
	 * @return
	 */
	Integer getiState(@Param("uId") String uId);

	/**
	 * 按编号占用
	 * @param rechargeCard
	 * @return
	 */
	int employById(RechargeCard rechargeCard);
	
	/**
	 * 将过期数据更新状态
	 * @param rechargeCard
	 * @return
	 */
	int expire(RechargeCard rechargeCard);
	
	/**
	 * 取过期数据
	 * @return
	 */
	List<RechargeCard> expireData();
	
	/**
	 * 查询顾客所持充值卡
	 * @param iState
	 * @param sCustomerId
	 * @return
	 */
	List<RechargeCard> findByCustomer(
		@Param("iState") Integer iState,
		@Param("sCustomerId") String sCustomerId
	);

	/**
	 * 取检验字段的值
	 * @param uId 记录主键
	 * @param sOrderNo 订单号
	 * @param tableName 表名
	 * @return Map<String, Object> 返回内容data中存放的是Map
	 */
	Map<String, Object> getCheckField(
		@Param("uId") String uId,
		@Param("sOrderNo") String sOrderNo,
		@Param("tableName") String tableName
	);
	
	/**
	 * 查询顾客账户
	 * @param sId
	 * @return
	 */
	CustomerAccountBase findCustomer(@Param("sId") String sId);
	
	/**
	 * 错误值累加
	 * @param uId 表编号
	 * @param tableName 表名
	 * @return
	 */
	int addErrorCount(@Param("uId") String uId, @Param("tableName") String tableName);
	
	/**
	 * 更新顾客账户中的余额
	 * @param customerAccountBase
	 * @return
	 */
	int changeCustomerAccount(CustomerAccountBase customerAccountBase);
	
	/**
	 * 新增充值记录数据
	 * @param rechargeBase
	 * @return
	 */
	int addRecharge(RechargeBase rechargeBase);

	/**
	 * 修改状态
	 * @param rechargeCard
	 * @return
	 */
	int changeState(RechargeCard rechargeCard);
	
}
